iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0
Software Development

Python派神,大顯神威!!系列 第 14

【Day14】:實作Python爬蟲取得股價資訊(四)+ pandas資料科學套件

  • 分享至 

  • xImage
  •  

今天開始要將程式或取的股價資訊稍作整頓,
因此將運用資料科學套件pandas,它是資料科學分析的前置工具。
它可以被用來執行強大的資料分析。以往我們大都使用試算表來當作處理與分析資料的工具。但是試算表有列數量的侷限性限制,超過限制就無法滿足資料分析的需求。對於資料維度也是一個試算表的一大挑戰限制,但,這些Python都可以幫助我們一一實現。
Pandas可說是 Python提供類似Excel試算表的功能,可結合NumPy(Numerical Python的簡稱)的特性,以及試算表和關連式資料庫(Relation Database)的資料操作能力,藉此可用來對資料進行切割、聚合及重構等操作。

當使用Anaconda 3 的版本時,在預設的狀況下會安裝Python、IPython及Jupyter記事本、Pandas。如果沒有安裝Anaconda的話,就需要透過pip來安裝pandas套件。
$ pip install pandas

  1. 匯入pandas套件
    安裝完畢後,使用前我們一樣要先匯入pandas套件:
    import pandas as pd

pandas提供了3種資料結構,其中最重要的兩個基本資料結構就屬Series與DataFrame,另外一個是Panels。
接下來請先打開Spyder,有機會就跟著我一起學習:
(一) 建立Pandas Series序列
序列(Series)像是一維陣列資料所組成的物件。我們可以使用Python的Series()函式來建立一個Serie:

s = pd.Series([1, 2, 3, 4])
0    1
1    2
2    3
3    4
dtype: int64

輸出結果為兩行。第一行為索引,第二行為Series資料。輸出的每一個row由index標籤(label)及其對應的值所組成。如果在建立Series資料的時候沒有指定index的話,pandas會自動產生從0開始的整數索引標籤。

(二) 建立DataFrame
使用DataFrame()函示來建立。他是一個如同有索引的二維串列。

import pandas as pd
taiwan ={'city':['台北市', '台中市', '高雄市'],
'pop':[2631083, 2816741, 2773401],
'area':[271.7997, 2214.8968, 2951.8524],}

pd.DataFrame(taiwan)

例如透過上面的taiwan字典,我們可以建立一個DataFrame。
(三) 利用DataFrame篩選股市資料
https://www.twse.com.tw/exchangeReport/MI_INDEX?response=csv&date=20220929&type=ALLBUT0999
昨天取出的股價資訊其中一筆如下:
"9914","美利達","666,197","756","121,993,792","184.50","187.00","180.50","181.50","-","3.00","180.50","1","181.50","4","11.38",

通常 “逗點”表示串起前後的資料,因此可以算出16 + 1個欄位,最後一欄為空值

import requests
import pandas as pd
from io import StringIO
dateStr = "20220928"

requestData = requests.get('https://www.twse.com.tw/exchangeReport/MI_INDEX?response=csv&date=' 
                           + dateStr + '&type=ALLBUT0999')

#print(requestData.text)
stockInfo = requestData.text.split('\n')

# 使用for迴圈檢查每一筆資料,保留'",'分隔項目等於17的資料
stockInfo = [x for x in stockInfo if len(x.split('",')) == 17 ]

data = "\n".join(stockInfo)

#利用pd.read_csv轉換為DataFrame的格式
datafr = pd.read_csv(StringIO("\n".join(stockInfo)), header=0)

#刪除空值欄位
datafr = datafr.drop(columns=['Unnamed: 16'])

# 使用DataFrame格式篩選美利達股票的證券代號
filter_df = datafr[datafr["證券代號"] == "9914"]

# 列印指定股價內容
print(filter_df)

產生結果畫面如下:
https://ithelp.ithome.com.tw/upload/images/20220929/20141198qIQTgKppGY.png

對於不常寫程式的人,今天可能會有點頭暈,
但對於常寫程式的人,今天會覺得收穫很多,
不過,寫程式就是要多看多打程式碼,
養成習慣很多語法、邏輯就會漸漸內化到腦中。

今天這樣是不是更有成就感了,我們明天再接著精緻化這個功能。


上一篇
【Day13】:實作Python爬蟲取得股價資訊(三)+爬取資料的reques套件
下一篇
【Day15】:實作Python爬蟲取得股價資訊(五) +日期時間處理的datetime套件
系列文
Python派神,大顯神威!!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言